﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Iacym.Entities;
using Iacym.Repository;
using Microsoft.Practices.Unity;

namespace Iacym.BusinessLogic
{
    public class OfrendaBL : IOfrendaBL
    {
        [Dependency]
        public IOfrendaRepository ofrendaRepository { get; set; }

        public List<OFRENDA> GetAllFromOfrendas()
        {
            return ofrendaRepository.GetAllFromOfrendas();
        }

        public OFRENDA GetOfrendaById(int id)
        {
            return ofrendaRepository.GetOfrendaById(id);
        }

        public List<OFRENDA> GetFromOfrendasByPersona(string criterio)
        {
            return ofrendaRepository.GetFromOfrendasByPersona(criterio);
        }
        
        public List<OFRENDA> GetFromOfrendaByTipoOfrendaPersona(int tipoOfrenda, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaPersona(tipoOfrenda, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoOfrendaPersonaFechaEspec(int tipoOfrenda, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaPersonaFechaEspec(tipoOfrenda, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoOfrendaPersonaRangoFechas(int tipoOfrenda, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaPersonaRangoFechas(tipoOfrenda, criterio, fechaIni, fechaFin, opc);
        }


        public List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoMonedaPersona(int TO, int TM, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaTiPoMonedaPersona(TO, TM, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoMonedaPersonaFechaEspec(int TO, int TM, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaTiPoMonedaPersonaFechaEspec(TO, TM, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoMonedaPersonaRangoFechas(int TO, int TM, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaTiPoMonedaPersonaRangoFechas(TO, TM, criterio, fechaIni, fechaFin, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoPersona(int TO, int TP, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaTiPoPagoPersona(TO, TP, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoPersonaFechaEspec(int TO, int TP, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaTiPoPagoPersonaFechaEspec(TO, TP, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoPersonaRangoFechas(int TO, int TP, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaTiPoPagoPersonaRangoFechas(TO, TP, criterio, fechaIni, fechaFin, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersona(int TO, int TP, int TM, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersona(TO, TP, TM, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersonaFechaEspec(int TO, int TP, int TM, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersonaFechaEspec(TO, TP, TM, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersonaRangoFechas(int TO, int TP, int TM, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoOfrendaTiPoPagoTipoMonedaPersonaRangoFechas(TO, TP, TM, criterio, fechaIni, fechaFin, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoMonedaPersona(int tipoMoneda, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoMonedaPersona(tipoMoneda, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoMonedaPersonaFechaEspec(int tipoMoneda, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoMonedaPersonaFechaEspec(tipoMoneda, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoMonedaPersonaRangoFechas(int tipoMoneda, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoMonedaPersonaRangoFechas(tipoMoneda, criterio, fechaIni, fechaFin, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoPagoPersona(int tipoPago, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoPagoPersona(tipoPago, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoPagoPersonaFechaEspec(int tipoPago, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoPagoPersonaFechaEspec(tipoPago, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoPagoPersonaRangoFechas(int tipoPago, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoPagoPersonaRangoFechas(tipoPago, criterio, fechaIni, fechaFin, opc);
        }

        public void AddOfrenda(OFRENDA ofrenda)
        {
            var msg = "";
            var ok = ofrenda.Validate(out msg);
            if (ok)
            {
                ofrendaRepository.AddOfrenda(ofrenda);
            }
            else
            {
                throw new Exception(msg);
            }
        }

        public void UpdateOfrenda(OFRENDA ofrenda)
        {
            var msg = "";
            var ok = ofrenda.Validate(out msg);
            if (ok)
            {
                ofrendaRepository.UpdateOfrenda(ofrenda);
            }
            else
            {
                throw new Exception(msg);
            }
        }

        public List<OFRENDA> GetFromOfrendaByPersonaFechaEspec(string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByPersonaFechaEspec(criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByPersonaRangoFechas(string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByPersonaRangoFechas(criterio, fechaIni, fechaFin, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTiPoPagoTipoMonedaPersona(int TP, int TM, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTiPoPagoTipoMonedaPersona(TP, TM, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTiPoPagoTipoMonedaPersonaFechaEspec(int TP, int TM, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTiPoPagoTipoMonedaPersonaFechaEspec(TP, TM, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTiPoPagoTipoMonedaPersonaRangoFechas(int TP, int TM, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTiPoPagoTipoMonedaPersonaRangoFechas(TP, TM, criterio, fechaIni, fechaFin, opc);
        }


        public List<OFRENDA> GetFromOfrendaByTipoReunionPersona(int tipoReunion, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionPersona(tipoReunion, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionPersonaFechaEspec(int tipoReunion, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionPersonaFechaEspec(tipoReunion, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionPersonaRangoFechas(int tipoReunion, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionPersonaRangoFechas(tipoReunion, criterio, fechaIni, fechaFin, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaPersona(int TR, int TO, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoOfrendaPersona(TR, TO, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaPersonaFechaEspec(int TR, int TO, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoOfrendaPersonaFechaEspec(TR, TO, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaPersonaRangoFechas(int TR, int TO, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoOfrendaPersonaRangoFechas(TR, TO, criterio, fechaIni, fechaFin, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoPagoPersona(int TR, int TP, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoPagoPersona(TR, TP, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoPagoPersonaFechaEspec(int TR, int TP, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoPagoPersonaFechaEspec(TR, TP, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoPagoPersonaRangoFechas(int TR, int TP, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoPagoPersonaRangoFechas(TR, TP, criterio, fechaIni, fechaFin, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoMonedaPersona(int TR, int TM, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoMonedaPersona(TR, TM, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoMonedaPersonaFechaEspec(int TR, int TM, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoMonedaPersonaFechaEspec(TR, TM, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoMonedaPersonaRangoFechas(int TR, int TM, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoMonedaPersonaRangoFechas(TR, TM, criterio, fechaIni, fechaFin, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersona(int TR, int TO, int TP, int TM, string criterio, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersona(TR, TO, TP, TM, criterio, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersonaFechaEspec(int TR, int TO, int TP, int TM, string criterio, DateTime fecha, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersonaFechaEspec(TR, TO, TP, TM, criterio, fecha, opc);
        }

        public List<OFRENDA> GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersonaRangoFechas(int TR, int TO, int TP, int TM, string criterio, DateTime fechaIni, DateTime fechaFin, int opc)
        {
            return ofrendaRepository.GetFromOfrendaByTipoReunionTipoOfrendaTiPoPagoTipoMonedaPersonaRangoFechas(TR, TO, TP, TM, criterio, fechaIni, fechaFin, opc);
        }
    }
}
